OpenWRT路由器科学上网自动分流的工作原理

您所在的位置:网站首页 openwrt 6f795e2a001f668 OpenWRT路由器科学上网自动分流的工作原理

OpenWRT路由器科学上网自动分流的工作原理

2023-03-22 11:35| 来源: 网络整理| 查看: 265

OpenWRT路由器科学上网自动分流的工作原理  2020/6/7   计算机    次   3 条

最近研究了一台刷了OpenWRT的路由器,里面有一个科学上网的工具引发了我的兴趣。研究了好几天,终于把国内国外流量自动分流的原理弄清了。很多东西都是个人的猜测,如有不对的地方,欢迎大家留言讨论。

OpenWRT科学上网自动分流主要是利用了如下几个工具:iptables、ipset、dnsmasq、pdnsd。我先来一个一个的解释一下这几个东东:

iptables是Linux系统自带的基于包过滤的防火墙工具,可以对流入、流出及流经服务器的数据包进行精细的控制。

ipset是iptables的扩展,它允许你创建某一类IP地址的集合,然后将这个集合交给iptables来处理。

dnsmasq是一个DNS缓存服务器,它可以将特定的域名发送给不同的dns服务器进行解析,不仅如此,它还可以把解析出来的IP地址存储在指定的ipset中。

pdnsd也是一个DNS缓存服务器,相对于dnsmasq,pdnsd的优点是可以使用TCP方式来查询DNS,但是pdnsd无法设置ipset,所以需要将dnsmasq和pdnsd两个结合起来使用。

弄清楚了这些工具的作用,OpenWRT路由器科学上网自动分流的工作原理就不难理解了:

首先,科学上网的进程启动之后会自动将需要走代理的域名地址添加到dnsmasq的conf-dir目录下的一些名为*.conf的文件中,内容如下:server=/google.com/127.0.0.1#1053ipset=/google.com/gfwlist第一行意思是解析google.com这个域名时不使用默认的DNS服务器,而是将查询请求转发到127.0.0.1#1053(pdnsd侦听的端口),由pdnsd来负责解析。第二行意思是将google.com解析出来的IP地址添加到一个名为gfwlist的ipset集合里面。这样,需要走代理的域名使用pdnsd来解析,不需要走代理的域名使用宽带运营商默认的DNS来解析,实现了域名解析的分流。

然后,它会修改iptables的转发规则,将gfwlist这个ipset添加到iptables的NAT规则列表中,利用iptables来转发这个ipset中的数据。我们来查看一下路由器的iptables如何处理名为gfwlist的这个ipset:

[root@OpenWRT:/root]#iptables -t nat -L -n REDIRECT  tcp -- 0.0.0.0/0  0.0.0.0/0  multiport dports 80,443 match-set gfwlist dst redir ports 1080

这样,所有访问gfwlist中IP地址的数据包都被转发到了1080端口(科学上网软件监听的端口)来进行处理,实现了数据的分流。

最后讲一下为什么要将指定的域名交给pdnsd来解析:因为pdnsd支持TCP方式查询,可以防止DNS污染,另外将pdnsd的上游查询服务器指定为OpenDNS,可以防止DNS劫持。至于什么叫DNS劫持和DNS污染,有兴趣的可以自行百度一下。pdnsd的配置文件一般是/var/etc/pdnsd.conf先设置pdnsd的global下的查询方式为TCP:query_method=tcp_only;然后设置一个OpenDNS的上游服务器:server {    label= "opendns";    ip = 208.67.222.222, 208.67.220.220;    port = 53;    timeout=6;    uptest=none;    interval=10m;    purge_cache=off;}

Tags: openwrt 科学上网 

« 上一篇 下一篇 » tianzhaidd 评论于 2021/5/17 22:07:04 回复 你好 请问是否能在梅林上实现自动分流? 愚蠢的地球人 评论于 2021/5/24 21:26:01 回复 梅林固件没有研究过 网络小包 评论于 2022/5/7 17:43:07 回复 大佬,目前op里面的passwall又添加了chinadns-ng 还有pdnsd分流,这又变成了什么流程呢 愚蠢的地球人 评论于 2022/5/8 20:09:39 回复 都是为了解决DNS劫持和污染问题的,选择一种最适合自己网络环境的方案就可以了,具体的工作原理我没有详细去研究。 范强哲 评论于 2022/10/29 22:42:02 回复 不明白 ,passwall 可以直接根据geo文件分别 指定DNS解析。为什么还需要其他dns 插件dns。 musicman 评论于 2022/11/10 23:13:46 回复 因为geo域名集合其实是passwall用*ray核心处理的,如果只用geo的话会将所有流量都先导入*ray核心来分流,*ray处理流量的效率是远远不如iptables的 发表评论:取消回复

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

相关推荐 OpenWrt路由器下面设备直接访问光猫利用OpenWrt的Hotplug与DNSPOD的API实现DDNS


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3